<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>变量提升与函数提升</title>
  </head>
  <body>
    <script>
      /**
       * 参考博客：https://www.cnblogs.com/qianguyihao/p/8619437.html
       * 1.变量提升
       *   使用var关键字声明的变量会在所有的代码执行之前被声明,变量提升到当前作用域的前面，但是不会赋值。
       *   所以我们可以在变量声明前使用变量。但是不使用 var 关键字声明的变量不会被声明提前。
       *   使用var声明的变量是局部变量，不使用声明会是全局变量
       * 2.函数提升
       *   使用函数声明创建的函数（function fun(){}）,会在所有的代码执行之前被创建，
       *   也就是我们可以在函数声明前去调用函数，但是使用函数表达式(var fun = function(){})创建的函数没有该特性
       * */

      //面试题1--变量提升：输出undefined
      var a = 3;
      function fn() {
        console.log(a); //undefined
        var a = 4;
      }
      fn();

      //面试题2--函数提升
      console.log(b); //undefined
      fn2();
      var b = 3;
      function fn2() {
        console.log("fn2()");
      }
    </script>
  </body>
</html>
